package com.java.simple.study.jvm.memstruct.heap;

import java.util.concurrent.TimeUnit;

/**
 * @author zhoujunlin
 * @date 2022年06月19日 21:19
 * @desc 通过关闭开启逃逸分析查看关于gc情况
 * -Xmx128m -Xms128m -XX:-DoEscapeAnalysis -XX:+PrintGCDetails
 * 花费时间为：61ms   发生GC
 * -Xmx128m -Xms128m -XX:+DoEscapeAnalysis -XX:+PrintGCDetails
 * 花费时间为：6ms    没有发生GC
 */
public class StackAllocation {

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            // 16 * 10000000 / 1024 / 1024
            alloc();
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间为：" + (end - start) + "ms");

        // 为了方便查看堆内存中的对象个数  线程sleep
        try {
            TimeUnit.MINUTES.sleep(30);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    private static void alloc() {
        // 未发生逃逸
        User user = new User();
    }

    static class User {

    }

}
